package com.llxz.blog.article.service;


import com.llxz.blog.article.dto.*;
import com.llxz.blog.article.entity.Article;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;

@Service
public interface ArticleService {
    /**
     * 用户发表文章
     * @param article
     * @return
     */
    void addOneArticle(Article article);

    /**
     * 获取所有文章
     * @return
     */
    List<Article> getAllArticleByDate();

    /**
     * 用户或管理员删除文章
     * @param
     * @return
     */
    void deleteArticle(Article article);
    /**
     * 用户修改文章
     * @param article
     * @return
     */
    void updateArticle(Article article);

    /**
     * 审核通过
     */
    void CheckAndPass(String articleId);

    /**
     * 审核不通过
     */
    void CheckAndReject(String artcleId);

    /**
     *通过标签获取文章
     * @param
     * @return
     */
    List<Article> selectArticleByLabel(Article article);

    /**
     *提交评论
     * @param commentParams
     */
    void commitComment(CommitCommentParams commentParams);

    /**
     *删除评论
     * @param deleteCommentParams
     */
    void deleteMyComment(DeleteCommentParams deleteCommentParams);

    /**
     *点赞
     * @param clickLikeParams
     */
    void clickLike(ClickLikeParams clickLikeParams);

    /**
     *取消点赞
     * @param clickLikeParams
     */
    void clickUnlike(ClickLikeParams clickLikeParams);

    /**
     *文章详情
     * @param article
     * @return
     */
    Article selectOneByArticleId(Article article);

    /**
     *检索某类文章
     * @param type
     * @return
     */
    List<Article> getArticlesByType(String type);

    /**
     * 按标题检索文章
     * @param article
     * @return
     */
    List<Article> getArticlesByTitle(Article article);

    /**
     *获取待审核文章
     * @return
     */
    List<Article> getNotPassArticles();

    /**
     * 获取登录用户文章
     * @param article
     * @return
     */
    List<Article> getMyArticles(Article article);

    /**
     * 获取高热度文章
     * @return
     */
    List<Article> getHotArticles();

    /**
     *回复评论
     * @param replyCommentParams
     */
    void replyComment(ReplyCommentParams replyCommentParams);

    /**
     *删除评论
     * @param deleteReplyParams
     */
    void deleteReply(DeleteReplyParams deleteReplyParams);

    /**
     * 删除某人所有
     * @param phone
     */
    int deleteOnesAll(String phone);
    /**
     * 获取每天的文章数量
     */
    Integer getDayCount(String dateStr);
    /**
     * 判断某人是否点赞某文章
     */
    boolean isLike(CollectParam collectParam);

    /**
     *
     * @return
     */
    List<Article> getArticlesByComment();

    List<Article> getBlogByPhone(String mobile);

    Integer selectTotalCount();

    HashMap<String,Integer> selectHotLabels();

}
